package kr.co.bettersoft.waitnumberstorem.activity;

import kr.co.bettersoft.waitnumberstorem.common.CommonConstant;
import kr.co.bettersoft.waitnumberstorem.fragment.FragmentHome;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;

public class MainSettingsAutoLoginActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
//////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수
		
		String TAG = "MainSettings";
//		int app_end = 0;	// 뒤로가기 버튼으로 닫을때 2번만에 닫히도록

		// 공용 프립스
		SharedPreferences sharedPrefCustom;		
		int sharePrefsFlag = 1;					 
		// 가맹점 아이디
		static String merchantId;
		// 로케일
		static String countryCode;
		static String languageCode;

		// GCM 푸시 메시지 받을지 여부 저장.
		Boolean yn = false;
		
	///////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// 핸들러
		Handler handler = new Handler(){
			@Override
			public void handleMessage(Message msg){
				try{
					Bundle b = msg.getData();		
					if(b.getInt("showConfirm")==1){				// 확인창. 알림 수신 끔
						new AlertDialog.Builder(returnThis())
						.setTitle(CommonConstant. alertTitle )                                        	
						.setIcon(R.drawable.ic_dialog_img)
						.setMessage(b.getString("msg"))
						.setCancelable(true)
						.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int id) {
								Log.d(TAG,"alarm off");
							}
						})
						.setNegativeButton(getString(R.string.no), null)		 
						.show();
					}
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		};

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);

			addPreferencesFromResource(R.xml.settings_auto_login);
			sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
					Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
			sharedPrefCustom.registerOnSharedPreferenceChangeListener(this);	

			// 가맹점 아이디를 꺼낸다.
			merchantId = sharedPrefCustom.getString("merchantId", "");
			
			
			Boolean savedAutoLoginYn = sharedPrefCustom.getBoolean("autoLoginChecked", false);	
			if(savedAutoLoginYn){		// 들어올때 설정했다면 설정상태로
				CheckBoxPreference preference_alarm_chk = (CheckBoxPreference)findPreference("preference_auto_login_chk");
				preference_alarm_chk.setChecked(true);	
			}
			
			SharedPreferences.Editor init2 = sharedPrefCustom.edit();		 		// 강제 호출용도  .. 단어명은 의미없지만 리스너에서 꺼낼때와 일치해야함.
			int someNum = sharedPrefCustom.getInt("sharePrefsFlag", sharePrefsFlag);	// 이전 값과 같을수 있으므로.
			someNum = someNum * -1;													// 매번 다른 값이 들어가야 제대로 호출이 된다. 같은 값 들어가면 x		
			init2.putInt("sharePrefsFlag", someNum); 								// 프리퍼런스 값 넣어 업데이트 시키면 강제로 리스너 호출.
			init2.commit();			
			// 자체 프리퍼를 지목할 수 있게 됨. 프리퍼런스 동기화를 위함.
		}

		
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 프리퍼런스 관련
		
		// 프리퍼런스 리스너. (터치시 동작)
		/**
		 * onPreferenceTreeClick
		 *  프리퍼런스 리스너이다. (메뉴 선택시에 대한 동작 구현)
		 *
		 * @param preferenceScreen
		 * @param preference
		 * @return
		 */
		@Override
		public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
				Preference preference) {
			
			// 자동 로그인 설정 
			if(preference.equals((CheckBoxPreference)findPreference("preference_auto_login_chk"))){
				
				// 자동 로그인 설정 
				new backgroundThreadSaveAutoLogin().execute();
				
				
			}
			
			return super.onPreferenceTreeClick(preferenceScreen, preference);
		}	

		
		// 프리퍼런스 값 변경시 동작. 리스너. 
		/**
		 * onSharedPreferenceChanged
		 *  프리퍼런스 값 변경시 동작되는리스너이다.
		 *
		 * @param sharedPreferences
		 * @param key
		 * @return
		 */
		@Override
		public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
				String key) {
			if(key.equals("sharePrefsFlag")){		// oncreate 에서 넣은 것과 이름 일치해야 동작한다.   프리퍼런스 동기화 용도
				sharedPrefCustom = sharedPreferences;
			}
			// 자동 로그인 설정 변경시 로그인 용 설정에 저장.
			if(key.equals("preference_auto_login_chk")){	
				// 자동 로그인 설정 변경시 공유 프리퍼런스에 저장한다. --> 나중에 어플 재기동시 꺼내어 바로 통과 시킬수 있다. 
				Boolean autoLoginYn = ((CheckBoxPreference)findPreference("preference_auto_login_chk")).isChecked();
				SharedPreferences.Editor autoLogin = sharedPrefCustom.edit();
				autoLogin.putBoolean("autoLogin", autoLoginYn);
				autoLogin.putString("merchantId", merchantId);
				autoLogin.putString("countryCode", countryCode);		
				autoLogin.putString("languageCode", languageCode);
				autoLogin.commit();
				FragmentHome.autoLogin = autoLoginYn;
//				Log.d(TAG,"merchantId:"+merchantId+"/countryCode:"+countryCode+"/languageCode:"+languageCode+"/autoLogin:"+autoLogin);
				Log.d(TAG,"auto login setting changed.."+autoLoginYn);
			}
		}	
		
		
		
		
		/**
		 * 프리퍼런스에 저장.
		 */
		public class backgroundThreadSaveAutoLogin extends AsyncTask<Void, Void, Void>{
			private ProgressDialog dialog;
			@Override protected void onPreExecute() {  
				dialog = ProgressDialog.show(MainSettingsAutoLoginActivity.this, "", "Save..", true);
			} 
			@Override protected void onPostExecute(Void result) {  
				dialog.dismiss();
			} 
			@Override protected Void doInBackground(Void... params) {  
				Log.d(TAG,"backgroundThreadSaveAutoLogin");
				
				yn = ((CheckBoxPreference)findPreference("preference_auto_login_chk")).isChecked();
				if(!yn){
					Log.d(TAG,"auto login off");
					SharedPreferences.Editor saveAutoLoginYn = sharedPrefCustom.edit();		// 공용에 저장해 준다.
					yn = ((CheckBoxPreference)findPreference("preference_auto_login_chk")).isChecked();
					saveAutoLoginYn.putBoolean("autoLoginChecked", yn);
					saveAutoLoginYn.putString("autoLoginId", merchantId);
					saveAutoLoginYn.commit();
				}else{
					Log.d(TAG,"auto login on");
					SharedPreferences.Editor saveAutoLoginYn = sharedPrefCustom.edit();		// 공용에 저장해 준다.
					yn = ((CheckBoxPreference)findPreference("preference_auto_login_chk")).isChecked();
					saveAutoLoginYn.putBoolean("autoLoginChecked", yn);
					saveAutoLoginYn.putString("autoLoginId", merchantId);
					saveAutoLoginYn.commit();
				}
				
				return null; 
			}
		}
		
		
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 유틸	

		public Context returnThis(){
			return this;
		}

		
		// 확인을 받는 컨펌 창을 띄운다
		/**
		 * showConfirmDialog
		 *  확인을 받는 컨펌 창을 띄운다
		 *
		 * @param showConfirmCode
		 * @param msg
		 * @return 
		 */
		public void showConfirmDialog(final String msg){
			new Thread(
					new Runnable(){
						public void run(){
							Message message = handler.obtainMessage();				
							Bundle b = new Bundle();
							b.putInt("showConfirm", 1);			// 1. 알림수신 여부 확인
							b.putString("msg", msg);			// 화면에 보여줄 메시지
							message.setData(b);
							handler.sendMessage(message);
						}
					}
			).start();
		}
		

		/**
		 * onResume
		 *  액티비티 리쥼시 프리퍼런스 리스너를 등록한다
		 *
		 * @param
		 * @param
		 * @return
		 */
		@Override
		public void onResume(){	
			super.onResume();
//			app_end = 0;				// 뒤로가기 두번만에 닫히도록 초기화.
			getPreferenceScreen().getSharedPreferences() 			// 리스너 on
			.registerOnSharedPreferenceChangeListener(this); 

		}
		/**
		 * onResume
		 *  액티비티 Pause시 프리퍼런스 리스너를 해제한다
		 *
		 * @param
		 * @param
		 * @return
		 */
		@Override 
		protected void onPause() { 
			super.onPause(); 
			// Unregister the listener whenever a key changes 
			getPreferenceScreen().getSharedPreferences() 			// 리스너 off
			.unregisterOnSharedPreferenceChangeListener(this); 
		} 

	}
